package _08_factory_method_pattern.v_extend.single_factory;

import java.lang.reflect.Constructor;

/**
 * @Description: 生成单例的工厂类
 * 通过获得类构造器，然后设置访问权限，生成一个对象，然后提供外部访问，保证内存
 * 中的对象唯一。当然，其他类也可以通过反射的方式建立一个单例对象，确实如此，但是一
 * 个项目或团队是有章程和规范的，何况已经提供了一个获得单例对象的方法，为什么还要重
 * 新创建一个新对象呢？除非是有人作恶。
 * @Auther: 2019/6/11 16:07 by zhang.jy
 */
public class SingletonFactory {
	private static Singleton singleton;
	static {
		try {
			Class cl = Class.forName(Singleton.class.getName());
			//获得无参构造
			Constructor constructor = cl.getDeclaredConstructor();
			//设置无参构造是可访问的
			constructor.setAccessible(true);
			//产生一个实例对象
			singleton = (Singleton) constructor.newInstance();
		} catch (Exception e) {
			//异常处理
		}
	}

	public static Singleton getSingleton() {
		return singleton;
	}
}